/*
  Copyright (C) 2011, Kyungjoo Kim
  
  This file is part of LINAL (LINear ALgebra)
  
  All rights reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  Also add information on how to contact you by electronic and paper mail.
  
  
  Kyungjoo Kim
  iamkyungjoo@gmail.com
*/
#ifndef LINAL_COMMON_CONST_HXX_
#define LINAL_COMMON_CONST_HXX_

/*!
  Define the constants and null objects.
*/
#define LINAL_INT                FLA_INT

#define LINAL_REAL               FLA_DOUBLE
#define LINAL_SINGLE_REAL        FLA_FLOAT
#define LINAL_DOUBLE_REAL        FLA_DOUBLE
 
#define LINAL_COMPLEX            FLA_DOUBLE_COMPLEX
#define LINAL_SINGLE_COMPLEX     FLA_COMPLEX
#define LINAL_DOUBLE_COMPLEX     FLA_DOUBLE_COMPLEX

#define LINAL_SCALAR             FLA_SCALAR
#define LINAL_MATRIX             FLA_MATRIX

#define LINAL_LEFT               FLA_LEFT
#define LINAL_RIGHT              FLA_RIGHT

#define LINAL_TRANSPOSE          FLA_TRANSPOSE
#define LINAL_NO_TRANSPOSE       FLA_NO_TRANSPOSE

#define LINAL_ZERO_DIAG          FLA_ZERO_DIAG
#define LINAL_NONUNIT_DIAG       FLA_NONUNIT_DIAG
#define LINAL_UNIT_DIAG          FLA_UNIT_DIAG

#define LINAL_CONJ_TRANSPOSE     FLA_CONJ_TRANSPOSE
#define LINAL_CONJ_NO_TRANSPOSE  FLA_CONJ_NO_TRANSPOSE

#define LINAL_UPPER_TRIANGULAR   FLA_UPPER_TRIANGULAR
#define LINAL_LOWER_TRIANGULAR   FLA_LOWER_TRIANGULAR

#define LINAL_CONJUGATE          FLA_CONJUGATE
#define LINAL_NO_CONJUGATE       FLA_NO_CONJUGATE

#define LINAL_INVERSE            FLA_INVERSE
#define LINAL_NO_INVERSE         FLA_NO_INVERSE

#define LINAL_COMPLEX_REAL_PART  0
#define LINAL_COMPLEX_IMAG_PART  1

#define LINAL_NORM_ERROR_TOL     1.0e-12

#define LINAL_CPU                0
#define LINAL_GPU                100
#define LINAL_CPU_GPU            200
#define LINAL_CASCADE            300

#define LINAL_COM_HOST          0
#define LINAL_COM_DEVICE        100
#define LINAL_COM_CASCADE       200

#endif
